# ======================================================
# 将 GitHub 仓库 CSV 文件转换为 get_pypi_name.py 所需输入格式
# 说明：
# 1. 读取由 get_tools_from_github.py 生成的 CSV 文件
# 2. 提取仓库名称(name)和 URL(url)
# 3. 仅保留 Python 项目
# 4. 输出为每行 "<repo_name> <repo_url>" 的文本文件
# ======================================================

import argparse  # 用于解析命令行参数
import csv       # 用于读取和写入 CSV 文件

# ======================================================
# 核心转换函数
# ======================================================
def convert_github_csv_to_pypi_input(input_csv_file, output_txt_file):
    """
    将 GitHub CSV 文件转换为 get_pypi_name.py 所需的文本格式
    
    Args:
        input_csv_file (str): 输入 CSV 文件路径（get_tools_from_github.py 输出）
        output_txt_file (str): 输出文本文件路径（每行格式: <repo_name> <repo_url>）
    """
    try:
        # -----------------------------
        # 1. 打开 CSV 文件读取 & 文本文件写入
        # -----------------------------
        with open(input_csv_file, 'r', newline='', encoding='utf-8') as infile, \
                open(output_txt_file, 'w', encoding='utf-8') as outfile:

            reader = csv.DictReader(infile)  # 将 CSV 读取为字典形式，每行是 dict

            # -----------------------------
            # 2. 检查 CSV 是否包含必需列
            # -----------------------------
            required_fields = {'name', 'url', 'language'}
            if not required_fields.issubset(reader.fieldnames):
                print(f"错误：输入 CSV 文件 '{input_csv_file}' 必须包含 'name'、'url' 和 'language' 列。")
                return

            # -----------------------------
            # 3. 遍历 CSV 行，筛选 Python 项目
            # -----------------------------
            count = 0        # 用于统计符合条件的 Python 仓库数量
            total_count = 0  # 用于统计总仓库数量

            for row in reader:
                total_count += 1

                # 只处理 language 列为 Python 的仓库
                if row['language'] and row['language'].strip().lower() == 'python':
                    repo_name = row['name']  # 仓库名称
                    repo_url = row['url']    # 仓库 URL

                    # 写入输出文件，每行 "<repo_name> <repo_url>"
                    outfile.write(f"{repo_name} {repo_url}\n")
                    count += 1

            # -----------------------------
            # 4. 输出统计信息
            # -----------------------------
            print(f"总共检查 {total_count} 个仓库，筛选出 {count} 个Python项目。")
            print(f"输出已写入 '{output_txt_file}'。")

    except FileNotFoundError:
        # 输入文件不存在
        print(f"错误：找不到输入 CSV 文件 '{input_csv_file}'。")
    except Exception as e:
        # 其他异常
        print(f"发生错误：{e}")

# ======================================================
# 命令行入口函数
# ======================================================
def main():
    """
    主函数：
    1. 解析命令行参数
    2. 调用 convert_github_csv_to_pypi_input 执行转换
    """
    parser = argparse.ArgumentParser(
        description="将 GitHub 仓库 CSV 转换为 get_pypi_name.py 所需的格式。"
    )

    # -----------------------------
    # 输入 CSV 参数
    # -----------------------------
    parser.add_argument(
        "--input_csv",
        default="github_ai_repos_with_desc.csv",
        help="get_tools_from_github.py 生成的输入 CSV 文件路径 (默认: github_ai_repos_with_desc.csv)"
    )

    # -----------------------------
    # 输出 TXT 参数
    # -----------------------------
    parser.add_argument(
        "--output_txt",
        default="repos.txt",
        help="get_pypi_name.py 所需的输出文本文件路径 (默认: repos.txt)"
    )

    # 解析命令行参数
    args = parser.parse_args()

    # 调用转换函数
    convert_github_csv_to_pypi_input(args.input_csv, args.output_txt)

# ======================================================
# 程序入口
# ======================================================
if __name__ == "__main__":
    main()
